
/**
 * TODO:: use CUDA to accelerate
 */

#ifndef COLOR_BAR_H
#define COLOR_BAR_H

#include <vector>

#include <boost/gil.hpp>
#include <boost/gil/extension/io/png.hpp>
#include <boost/gil/image.hpp>
#include <boost/gil/image_view.hpp>
#include <boost/gil/io/io.hpp>
#include <boost/gil/typedefs.hpp>


// typedef boost::gil::rgb8_pixel_t Color;

using namespace boost::gil;

namespace solar
{
    class ColorBar
    {
        public:
            ColorBar(float min_value = 0.0, float max_value = 100.0);

            void setColor(); // 设置颜色表---设置一次即可，设置之后不再更改
            auto getColorAtValue(float value) -> rgb8_pixel_t; // 获得某个值对应的颜色
            auto getColorAtValue(float value, float min_value, float max_value) -> rgb8_pixel_t;
            auto getColorAtFactor(float factor) -> rgb8_pixel_t;
            auto getFactor(float value) -> float; // 获取该值对应的比例

            auto getRedComponentAtValue(float value) -> int;
            auto getGreenComponentAtValue(float value) -> int;
            auto getBlueComponentAtValue(float value) -> int;

            void setMinMax(float min_value, float max_value);
            auto getMin() -> float;
            auto getMax() -> float;

            void test();

        private:
            float min_value_;
            float max_value_;
            std::vector<rgb8_pixel_t> colors_; // jet颜色集
            std::vector<float> factors_;       // 每个颜色对应的比例
    };

} // namespace solar

#endif
